flowchart TD
    subgraph "预处理阶段"
        A["输入: Test Spans<br>(trace_id, parent_span_id, JSON, ...)"] --> B["JSON 扁平化处理"]
        B --> C["提取 (field, value) 元组<br>过滤布尔类型等 tuple"]
        C --> D["构建语料库"]
        I["输入：接口描述<br>(JSON/Protobuf/... Schema)"] --> II["提取操作依赖关系"]
        II --> D
        D --> E["2.分析 value 的共现情况<br>统计 tuple 相似性"]
        E --> F["输出: 操作之间的 field 关联矩阵<br>(similarity_matrix)"]
        D --> G["1.分析 value 的 IDF 信息量<br>统计 tuple 信息量"]
        G --> H["输出: 不同操作的高信息量的 field 列表<br>(priority_fields)"]
    end

    H --> F
    H --> M
    F --> U

    subgraph "预测阶段"
        J["输入: Live Spans<br>(JSON, Operation, ...)"] --> K["JSON 扁平化处理"]
        K --> L["提取 (field, value) 元组 tuple (过滤布尔类型等)"]
        L --> M["按 priority_fields 过滤 tuple"]
        M --> N["构建反向索引<br>value -> [span_id]"]
        N --> O["生成 focused_values 列表<br>"]
        
        O --> P{"focused_values 列表<br>是否为空?"}
        P -- 否 --> Q["遍历 focused_values"]
        Q --> R["查询反向索引<br>获取候选 in_span 和 out_span"]
        R --> S["计算 JSON 文档相似性"]
        S --> U["in_span 得分 = tuple 共现矩阵 ✖️ filed 关联矩阵"]
        U --> V["选择得分最高的 in_span<br>作为关联结果"]
        V --> W["标记已关联的 out_span"]
        
        W --> X{"所有 out_span<br>是否已关联?"}
        X -- 否 --> Y["利用剩余 out_span 更新 focused_values 列表 🤔"]
        Y --> Z["根据 focused_values 动态更新反向索引"]
        Z --> Q
        
        X -- 是 --> AA["输出: 关联映射 🤠<br>{out_span_id -> in_span_id}"]
        P -- 是 --> AB["输出: 缺少有效关联 😭"]
    end

    style A fill:#f9f,stroke:#333,stroke-width:2px
    style I fill:#f9f,stroke:#333,stroke-width:2px
    style J fill:#f9f,stroke:#333,stroke-width:2px
    style F fill:#bbf,stroke:#333,stroke-width:1px
    style H fill:#bbf,stroke:#333,stroke-width:1px
    style AA fill:#bbf,stroke:#333,stroke-width:1px
    style AB fill:#bbf,stroke:#333,stroke-width:1px

    classDef input style fill:#f9f,stroke:#333
    classDef output style fill:#bbf,stroke:#333
    class A,J input
    class F,I,AA,AB output
